package org.KeyCrafter.ds.dict;

/**
 * 定义字典包含方法
 */
public interface Dict {

    // 常量
    int DICT_OK = 0; // 操作成功
    int DICT_ERR = 1; // 操作失败
    // 初始化hash表大小, 默认大小为4
    int DICT_HT_INITIAL_SIZE = 4;
    // 哈希函数种子(用于计算hashcode作为索引)
    int SEED = 123;

    // 指示字典是否启用 rehash 的标识
    boolean dict_can_resize = true;
    // 强制 rehash 的比率
    int dict_force_resize_ratio = 5;

    interface Entry{
        Object getKey();
        Object getValue();
        void setValue(Object value);
    }

    // 添加
    int add(Object key, Object val);
    // 将给定的键值对添加到字典里面，如果键已经存在于字典，那么用新值取代原有的值
    int replace(Object key, Object val);
    // 将键添加到字典中
    Entry replaceRaw(Object key);
    // 返回给定键的值
    Object fetchValue(Object key);
    Entry find(final Object key);
    // 随机返回字典中任意一个节点
    Entry getRandomKey();
    // 重新调整字典大小
    int resize();
    // 从字典中删除给定键所对应的键值对
    int delete(Object key);
    // 清空字典上的所有哈希表节点，并重置字典属性
    void empty();
    // 创建并返回给定字典的不安全迭代器
    DictIterator getIterator();
    // 创建并返回给定节点的安全迭代器
    DictIterator getSafeIterator();
    boolean isRehashing();
    int rehashMilliseconds(int ms);
    // 返回给定字典的大小
    long slots();
    // 返回字典的已有节点数量
    long size();
}
